package com.atguigu.gulimall.ware.config;

import org.springframework.amqp.core.*;
import org.springframework.amqp.rabbit.annotation.RabbitListener;
import org.springframework.amqp.support.converter.Jackson2JsonMessageConverter;
import org.springframework.amqp.support.converter.MessageConverter;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

import java.util.HashMap;

/**
 * @description:
 * @author: BlueSky
 * @create: 2021-10-08 08:52
 **/
@Configuration
public class MyRabbitConfig {
	/**
	 * 使用JSON序列化机制，进行消息转换
	 */

	@Bean
	public MessageConverter messageConverter() {
		return new Jackson2JsonMessageConverter();
	}


	//需要有消费者监听才会自动创建交换机与队列
	// @RabbitListener(queues = "stock.release.stock.queue")
	// public void handle(Message message){
	//
	// }

	@Bean
	public Exchange stockEventExchange(){
		return new TopicExchange("stock-event-exchange",true,false);
	}

	@Bean
	public Queue stockReleaseStockQueue(){
		return new Queue("stock.release.stock.queue",true,false,false);
	}

	@Bean
	public Queue stockDelayQueue(){
		HashMap<String, Object> args = new HashMap<>();
		args.put("x-dead-letter-exchange","stock-event-exchange");
		args.put("x-dead-letter-routing-key","stock.release");
		args.put("x-message-ttl",120000);
		return new Queue("stock.delay.queue",true,false,false,args);
	}

	@Bean
	public Binding stockReleaseBinding(){
		return new Binding("stock.release.stock.queue",
				Binding.DestinationType.QUEUE,
				"stock-event-exchange",
				"stock.release.#",
				null);
	}

	@Bean
	public Binding stockLockedBinding(){
		return new Binding("stock.delay.queue",
				Binding.DestinationType.QUEUE,
				"stock-event-exchange",
				"stock.locked",
				null);
	}

}
